# 创建索引，用于搜索引擎
from haystack import indexes
from doctors.models import DoctorModel,HospitalModel

class DoctorIndex(indexes.SearchIndex, indexes.Indexable):
    # 全文索引[可以根据配置，可以包括多个字段索引]
    # document=True 表示当前字段为全文索引
    # use_template=True 表示接下来haystack需要加载一个固定路径的html模板文件，让text与其他索引字段绑定映射关系
    text = indexes.CharField(document=True, use_template=True)

    # 普通索引[单字段，只能提供单个字段值的搜索，所以此处的声明更主要是为了提供给上面的text全文索引使用的]
    # es索引名 = indexes.索引数据类型(model_attr="ORM中的字段名")
    id = indexes.IntegerField(model_attr="id")
    name = indexes.CharField(model_attr="name")
    avatar = indexes.CharField(model_attr="avatar")
    get_title_display = indexes.CharField(model_attr="get_title_display")
    introduction = indexes.CharField(model_attr="introduction")
    specialty = indexes.CharField(model_attr="specialty")
    department = indexes.CharField(model_attr="department__name")
    hospital = indexes.CharField(model_attr="hospital__name")
    hospital_id = indexes.IntegerField(model_attr="hospital__id")
    consultation_price = indexes.DecimalField(model_attr="consultation_price")
    rating = indexes.DecimalField(model_attr="rating")
    avg_response_time = indexes.IntegerField(model_attr="avg_response_time")
    city = indexes.CharField(model_attr="city__name")

    # 指定与当前es索引模型对接的mysql的ORM模型
    def get_model(self):
        return DoctorModel

    # 当用户搜索es索引时，对应的提供的mysql数据集有哪些？
    def index_queryset(self, using=None):
        return self.get_model().objects.all()

